//
//  HMEmoticonManager.swift
//  HMWeiBo
//
//  Created by Apple on 16/8/7.
//  Copyright © 2016年 itheima. All rights reserved.
//

import UIKit
// 这个类用于管理,表情的读取,以及 表情包的设置
class HMEmoticonManager: NSObject {

    // 管理我们的表情包
    // static 类可以直接访问; 编译之后就分配好了地址空间; 常驻内存,对于一下经常使用的东西来说,性能要快一点
   
    /// 定义了一个最近表情包的数组
    static var recentEmoticon: [HMEmoticon] = [HMEmoticon]()
    
    /// 定义一个默认表情包数组
    static var defaultEmoticon: [HMEmoticon] = HMEmoticonManager.getEmoticon("com.sina.default")
    
    /// 定义一个emoji表情包数组
    static var emojiEmoticon: [HMEmoticon] = HMEmoticonManager.getEmoticon("com.apple.emoji")
    
    /// 定义一个浪小花表情包数组
    static var lxhEmoticon: [HMEmoticon] = HMEmoticonManager.getEmoticon("com.sina.lxh")
    
    
    //  创建一个读取表情的方法
   class func getEmoticon(package: String) -> [HMEmoticon]{
        
        // 1. 先拿到Emoticons.Bundle
        // 2. 根据包名,来获取info.plist
        // 3. 获取info.plist 里的 emoticons数组
        // 4. 对数组进行遍历,来转换成模型
        
        
        // 1. 获取Emoticons.bundle
        let path = NSBundle.mainBundle().pathForResource("Emoticons.bundle", ofType: nil)!
        // 2.  拼接包的路径
        let packagePath = (path as NSString).stringByAppendingPathComponent(package)
        // 2.1 拼接info.plist
        let infoPath = (packagePath as NSString).stringByAppendingPathComponent("info.plist")
        // 2.2 读取plist
        let infoDict = NSDictionary(contentsOfFile: infoPath)!
        
       
        // 3. 获取info.plist 里的 emoticons数组
        //确定emoticons里边肯定有数组,所以 as!
        let emoticons = infoDict["emoticons"] as! [[String: AnyObject]]
        
        
        // 4 对数组进行遍历,来转换成模型
        
        // 4.1 初始化一个数组
        var temp = [HMEmoticon]()
        
        for emoticon in emoticons {
            
            let emo = HMEmoticon(dict: emoticon)
            
            // 把包路径赋值给 emo.path
            emo.path = packagePath
            
            // 4.2 添加到数组
            temp.append(emo)
            
        }
        
        return temp
    }
    
    
    // 创建一个方法,来对一位数组进行分页
   class func pageEmoticon(emoticons: [HMEmoticon]) -> [[HMEmoticon]]{
        
        // 分页的逻辑/步骤
        // 100 为例子 99 / 20 + 1
        
        // 1. 需要知道多少页
        let page = (emoticons.count - 1) / 20 + 1
        
        var temp = [[HMEmoticon]]()
        // 2.  通过循环来切割数组
        for i in 0..<page {
            
            var len = 20 // 20 // 40 // 60
            
            let loc = i * len
            
            // 判断
            if len + loc > emoticons.count {
                
                len = emoticons.count - loc
            }
            
            // 3. 拿到子数组
            let subArray = (emoticons as NSArray).subarrayWithRange(NSMakeRange(loc, len)) as! [HMEmoticon]
            // 添加到数组里
            temp.append(subArray)
        }
        
        return temp
    }
    
    
    class func getAllEmoticons() -> [[[HMEmoticon]]] {
        
        let array = [ pageEmoticon(recentEmoticon),pageEmoticon(defaultEmoticon) ,pageEmoticon(emojiEmoticon) ,pageEmoticon(lxhEmoticon)]
        
        return array
        
    }
    
    
    //MARK:-- 声明一个添加最近表情的方法
    class func addRecent(emo: HMEmoticon) {
        
        // 排除一下重复点击的按钮
        // 判断一下这个数组里有没有这个对象
        if !recentEmoticon.contains(emo) {
            
            // 把表情插入到第一个
            recentEmoticon.insert(emo, atIndex: 0)
            
            // 我们的数据源发生了改变,但是我们不需要reloadData
            // 因为 数据源是指向的这块内存区域不会改变
            
            // 我们的最近表情就不要分组了,多余20个就得删除
            if recentEmoticon.count > 20 {
                recentEmoticon.removeLast()
            }
        }
     
        
        // 可以自己去扩展一下,最近表情的数据存储 !!!
        // 归档的时候,注意路径的问题. 沙盒的文件夹名字不固定
        
    }
    
    // MARK:-- 声明一个返回一个表情对象的一个方法
    class func searchEmoticon(emoticonString: String) -> HMEmoticon?{
        
        //先遍历默认表情
        for emoticon in defaultEmoticon{
            
            if emoticon.chs == emoticonString {
                return emoticon
            }
            
        }
        
        for emoticon in lxhEmoticon{
            
            if emoticon.chs == emoticonString {
                return emoticon
            }
        }
        
        return nil
//        return HMEmoticon()
        
        
    }
    
}
